package cn.geekyspace.scanhive.infrastructure.ui;

import javafx.animation.FadeTransition;
import javafx.application.Platform;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.util.Duration;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * UI最近扫码结果组件
 */
@Data
@Slf4j
@Component
@RequiredArgsConstructor
public class UILastScanResult {

    private CheckBox autoStorage;   // 自动入库勾选
    private TextArea scanText;      // 扫码文本框
    private Label scanStatus;       // 扫码状态（OK/NG）

    /**
     * 更新最近扫码结果
     * @param scanText 扫码文本
     * @return 扫码状态（true=OK, false=NG）
     */
    public Boolean updateLastScanResult(String scanText){
        // 更新扫码文本框内容（淡入动画效果）
        updateScanText(scanText);
        // 检查扫码状态（至少包含3个分号）
        boolean isValidScan = checkScanStatus(scanText);
        // 更新OK/NG状态标签
        updateScanStatusLabel(isValidScan);
        return isValidScan;
    }

    // 更新扫码文本框内容（淡入动画效果）
    private void updateScanText(String text) {
        Platform.runLater(() -> {
            scanText.clear();  // 清空文本框
            scanText.appendText(text);  // 设置新文本

            // 创建并播放淡入动画效果
            FadeTransition fadeIn = new FadeTransition(Duration.seconds(1), scanText);
            fadeIn.setFromValue(0);
            fadeIn.setToValue(1);
            fadeIn.setCycleCount(1);
            fadeIn.setAutoReverse(false);
            fadeIn.play();  // 开始动画
        });
    }

    // 检查扫码状态（至少包含3个分号）
    private boolean checkScanStatus(String scannedData) {
        if (scannedData == null) return false;

        long countCn = scannedData.chars().filter(ch -> ch == '；').count(); // 中文分号
        long countEn = scannedData.chars().filter(ch -> ch == ';').count(); // 英文分号

        return countCn >= 3 || countEn >= 3;
    }

    // 更新OK/NG状态标签
    private void updateScanStatusLabel(boolean status) {
        // 确保在 JavaFX 应用线程中更新 UI 元素
        Platform.runLater(() -> {
            String currentStyle = scanStatus.getStyle();  // 获取当前样式
            String backgroundColor = status ? "green" : "red";  // 根据状态设置颜色

            // 仅更新背景颜色
            String newStyle = currentStyle.replaceAll("(?<=-fx-background-color:)[^;]*", backgroundColor);
            scanStatus.setText(status ? "OK" : "NG");
            scanStatus.setStyle(newStyle);  // 应用新的样式
        });
    }


}
